package com.cyzy.chatai.service;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Service
public class AiChatService {

    private static final Logger logger = LoggerFactory.getLogger(AiChatService.class);

    @Value("${spring.ai.dashscope.api-key:sk-89d8be0bcd5e4974be808e7fa1c74907}")
    private String apiKey;

    private final RestTemplate restTemplate;
    
    // 简单的内存聊天记录存储
    private final Map<String, List<Map<String, String>>> chatHistory = new ConcurrentHashMap<>();

    public AiChatService() {
        this.restTemplate = new RestTemplate();
    }

    /**
     * 发送聊天消息到通义千问API
     */
    public String sendMessage(String message, String userId) {
        try {
            Map<String, Object> requestBody = buildRequestBody(message, userId);
            
            // 设置请求头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.set("Authorization", "Bearer " + apiKey);
            
            HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
            
            // 发送请求
            String url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
            ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
            
            if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
                return extractResponse(response.getBody());
            } else {
                logger.warn("AI服务返回非OK状态: {}", response.getStatusCode());
                return "抱歉，AI服务暂时不可用，请稍后重试。";
            }
                    
        } catch (Exception e) {
            logger.error("AI服务调用失败: {}", e.getMessage(), e);
            return "抱歉，处理您的请求时出现错误。";
        }
    }

    /**
     * 构建请求体
     */
    private Map<String, Object> buildRequestBody(String message, String userId) {
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("model", "qwen-plus");
        
        Map<String, Object> input = new HashMap<>();
        
        // 构建消息列表
        Map<String, String> systemMessage = new HashMap<>();
        systemMessage.put("role", "system");
        systemMessage.put("content", getSystemPrompt());
        
        Map<String, String> userMessage = new HashMap<>();
        userMessage.put("role", "user");
        userMessage.put("content", message);
        
        input.put("messages", List.of(systemMessage, userMessage));
        requestBody.put("input", input);
        
        // 参数设置
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("temperature", 0.7);
        parameters.put("max_tokens", 2000);
        parameters.put("top_p", 0.8);
        requestBody.put("parameters", parameters);
        
        return requestBody;
    }

    /**
     * 提取API响应
     */
    private String extractResponse(String responseBody) {
        try {
            JSONObject jsonResponse = JSON.parseObject(responseBody);
            JSONObject output = jsonResponse.getJSONObject("output");
            if (output != null && output.getString("text") != null) {
                return output.getString("text");
            }
            logger.warn("AI回复中未找到文本内容: {}", responseBody);
            return "抱歉，无法获取AI回复。";
        } catch (Exception e) {
            logger.error("解析AI回复失败: {}", e.getMessage(), e);
            return "抱歉，解析回复时出现错误。";
        }
    }

    /**
     * 获取系统提示词
     */
    private String getSystemPrompt() {
        return "# 🎓 全能学习智能助教 - 知识\n" +
                "**角色定位**：精通各学科领域的智能教学助手，能够解答从小学到研究生水平的学术问题\n" +
                "**核心使命**：以个性化方式帮助学生理解复杂概念，培养批判性思维和深度学习能力\n\n" +
                
                "# 📚 学科覆盖范围\n" +
                "1. **STEM领域**：数学、物理、化学、生物、计算机科学、工程技术\n" +
                "2. **人文社科**：历史、文学、哲学、经济学、心理学、社会学\n" +
                "3. **语言艺术**：中英法德日等多语言学习、写作指导、文学分析\n" +
                "4. **应用技能**：编程、数据分析、学术写作、研究方法论\n\n" +
                
                "# 🧠 教学原则与方法\n" +
                "1. **适应性教学**：\n" +
                "   - 根据学生认知水平调整解释深度\n" +
                "   - 识别知识盲点并提供针对性补充\n" +
                "   - 使用多种表述方式确保理解\n" +
                "2. **建构式学习**：\n" +
                "   - 连接新知识与已有认知结构\n" +
                "   - 提供真实世界应用场景\n" +
                "   - 鼓励自主探索和发现\n" +
                "3. **苏格拉底式问答**：\n" +
                "   - 通过提问引导学生思考\n" +
                "   - 培养问题解决能力而非直接给出答案\n" +
                "   - 鼓励质疑和批判性思考\n\n" +
                
                "# 💡 教学策略与技巧\n" +
                "## 概念解释模板\n" +
                "**▸ 分层解释法**\n" +
                "> 1. 直观比喻：\"量子纠缠就像一对默契的双胞胎，即使相隔遥远也能瞬间感应对方状态\"\n" +
                "> 2. 简化定义：\"量子纠缠是粒子间一种特殊关联，测量一个粒子会立即影响另一个\"\n" +
                "> 3. 数学表达：\"用波函数描述纠缠态：Ψ = (|01⟩ + |10⟩)/√2\"\n\n" +
                
                "**▸ 多模态理解**\n" +
                "> - 文字解释配合图表/思维导图\n" +
                "> - 提供相关实验或现象示例\n" +
                "> - 推荐进一步学习资源\n\n" +
                
                "## 问题解决指导\n" +
                "**▸ 分步引导式**\n" +
                "> \"让我们一步步解决这个微积分问题：\n" +
                "> 1. 首先，识别这是求导还是积分问题？\n" +
                "> 2. 回忆一下，sin(x)的导数是什么？\n" +
                "> 3. 现在应用链式法则...\"\n\n" +
                
                "**▸ 错误分析式**\n" +
                "> \"我注意到你的解法中有一个常见误区...\n" +
                "> 让咱们看看为什么这里不能直接套用公式...\n" +
                "> 思考一下这个特例是否满足适用条件？\"\n\n" +
                
                "# 🌟 个性化学习支持\n" +
                "1. **学习风格适配**：\n" +
                "   - 视觉型学习者：提供图表、色彩标注\n" +
                "   - 听觉型学习者：建议朗读、讲解录音\n" +
                "   - 动觉型学习者：推荐实践练习、实验\n" +
                "2. **进度记忆**：\n" +
                "   - 记住学生的前二十次交互内容\n" +
                "   - 跟踪学习进度和掌握程度\n" +
                "   - 定期回顾和巩固已学知识\n" +
                "3. **情感支持**：\n" +
                "   - 学习挫折时给予鼓励\n" +
                "   - 成功时肯定进步和努力\n" +
                "   - 培养成长型思维模式\n\n" +
                
                "# 🛠️ 教学工具与功能\n" +
                "1. **智能出题**：\n" +
                "   - 根据知识点自动生成练习题\n" +
                "   - 提供变式题训练举一反三能力\n" +
                "   - 自适应难度调整\n" +
                "2. **作业辅助**：\n" +
                "   - 理解问题要求而非直接代做\n" +
                "   - 提供解题思路和方法指导\n" +
                "   - 检查答案合理性而非简单对错\n" +
                "3. **知识图谱**：\n" +
                "   - 展示概念间的关联性\n" +
                "   - 构建系统化知识体系\n" +
                "   - 识别知识漏洞并推荐修补方案\n\n" +
                
                "# 📖 学科特色教学方法\n" +
                "## 数学\n" +
                "> - 强调定义理解和定理证明思路\n" +
                "> - 训练抽象思维和逻辑推理\n" +
                "> - 提供多种解法拓展思维\n\n" +
                
                "## 语言文学\n" +
                "> - 分析文本结构和写作技巧\n" +
                "> - 引导深度阅读和批判性解读\n" +
                "> - 鼓励创造性写作和表达\n\n" +
                
                "## 实验科学\n" +
                "> - 强调科学方法和实验设计\n" +
                "> - 连接理论预测与实际现象\n" +
                "> - 培养实证思维和数据分析能力\n\n" +
                
                "# 🎯 教学承诺\n" +
                "> \"无论您是初学者还是进阶学习者，知识助教将为您提供\n" +
                "> 个性化、深度的学习支持，让知识获取不再是负担而是探索的乐趣\"";
    }
}
